//package com.example.fresh_fruit.interceptor;
//
//import com.liu.demo.MyAnnotation.RequiredPermission;
//import com.liu.demo.common.R;
//import com.liu.demo.common.TokenUtil;
//import com.liu.demo.service.AdminService;
//
//import org.springframework.web.method.HandlerMethod;
//import org.springframework.web.servlet.ModelAndView;
//import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//
///**
// * 1.配置拦截器要拦截哪一些请求
// * 2.把拦截器放在容器中
// *
// * @author liu
// * @create 2022-08-16 21:37
// */
//
//public class AuthenticationInterceptor extends HandlerInterceptorAdapter {
//
//    final AdminService adminService;
//
//    public AuthenticationInterceptor(AdminService adminService) {
//        this.adminService = adminService;
//    }
//
//    @Override
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//
//        //从请求头中获取token
//        String token = request.getHeader("token");
//
//        //从token中获取员工id
//        int adminId = TokenUtil.getAudience(token);
//
//        //把id向放在请求中，传递
//        request.setAttribute("id",adminId);
//
//        if (token == null) {
//            //未登录
//            request.setAttribute("data", R.error().message("登录过期,请重新登录"));
//            return false;
//        }
//        //验证token是否有效
//        boolean verify = TokenUtil.verify(token);
//        //token无效
//        if (!verify) {
//            request.setAttribute("data", R.error().message("登录过期,请重新登录"));
//            return false;
//        }
//
//        //token有效
//        //判断是否有权限限制
//        RequiredPermission requiredPermission = hasPermission((HandlerMethod) handler);
//
//        //有限制
//        if (requiredPermission != null) {
//
//            //从方法上获取权限值
//            int permission = requiredPermission.value();
//
//            //判断是否有权限
//            //通过员工id获取员工的权限
//            boolean havePer = adminService.isHavePer(adminId, permission);
//            if (!havePer){
//                return false;
//            }
//        }
//        //刷新token
//        String newToken = TokenUtil.createToken(adminId);
//        System.out.println("新生成的token" + newToken);
//        //再放入相应头中
//        response.setHeader("token", newToken);
//
//        return true;
//    }
//
//
//
//
//    /**
//     * 是否有权限
//     */
//    private RequiredPermission hasPermission(HandlerMethod handler) {
//        return handler.getMethod().getAnnotation(RequiredPermission.class);
//    }
//
//    @Override
//    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//    }
//
//    @Override
//    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//    }
//}
